var mongo=require('./db');
var markdown=require('markdown').markdown;
function Post(name,title,tags,post){
	this.name=name;
	this.title=title;
	this.post=post;
	this.tags=tags;
}
module.exports=Post;

/*储存一片文章及其相关信息*/
Post.prototype.save=function(callback){
	var date=new Date();
	//存储各种时间格式方便以后拓展
	var time={
		date:date,
		year:date.getFullYear(),
		month:date.getFullYear()+'-'+(date.getMonth()+1),
		day:date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate(),
		minute:date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate()+" "+date.getHours()+":"+(date.getMinutes()<10?'0'+date.getMinutes():date.getMinutes())
	};

	//要存入数据库的文档
	var post={
		name:this.name,
		time:time,
		title:this.title,
		tags:this.tags,
		post:this.post,
		comments:[]
	};

	//打开数据库
	mongo.open(function(err,db){
		if(err){
			return callback(err);
		}
		//读取posts集合
		db.collection('posts',function(err,collection){
			if(err){
				db.close();
				return callback(err);
			}
			//将文档插入到posts集合
			collection.insert(post,{safe:true},function(err){
				mongo.close();
				if(err){
					return callback(err);
				}
				callback(null);
			});
		});
	});
};

/*[根据作者姓名]得到所有的文章刘表*/
Post.getAll=function(name,callback){
	//打开数据库
	mongo.open(function(err,db){
		if(err){
			return callback(err);
		}
		db.collection('posts',function(err,collection){
			if(err){
				db.close();
				return callback(err);
			}
			var query={};
			if(name){
				query.name=name;
			}
			//根据query对象查询posts集合
			collection.find(query).sort({time:-1}).toArray(function(err,docs){
				mongo.close();
				if(err){
					return callback(err);
				}
				docs.forEach(function(doc){
					doc.post=markdown.toHTML(doc.post);
				});
				callback(null,docs);
			});
		});
	});
};

/*[根据作者姓名]得到10篇的文章*/
Post.getTen=function(name,page,callback){
	//打开数据库
	mongo.open(function(err,db){
		if(err){
			return callback(err);
		}
		db.collection('posts',function(err,collection){
			if(err){
				db.close();
				return callback(err);
			}
			var query={};
			if(name){
				query.name=name;
			}
			collection.count(query,function(err,total){
				collection.find(query,{
					skip:(page-1)*10,
					limit:10
				}).sort({time:-1}).toArray(function(err,docs){
					mongo.close();
					if(err){
						return callback(err);
					}
					docs.forEach(function(doc){
						doc.post=markdown.toHTML(doc.post);
					});
					callback(null,docs,total);
				});	
			});	
		});
	});
};
/*根据作者姓名，文章日期，标题得到具体的文章信息*/
Post.getOne=function(name,day,title,callback){
	mongo.open(function(err,db){
		if(err){
			return callback(err);
		}
		db.collection('posts',function(err,collection){
			if(err){
				db.close();
				return callback(err);
			}
			collection.findOne({
				"name":name,
				"title":title,
				"time.day":day
			},function(err,doc){
				mongo.close();
				if(err){
					return callback(err);
				}
				if(doc){
					doc.post=markdown.toHTML(doc.post);
					doc.comments.forEach(function(comment){
						comment.content=markdown.toHTML(comment.content);
					});
				}
				callback(null,doc);
			});
		});
	});
};

/*根据作者姓名，文章日期，标题得到具体的文章信息，返回*/
Post.edit=function(name,day,title,callback){
	mongo.open(function(err,db){
		if(err){
			return callback(err);
		}
		db.collection('posts',function(err,collection){
			if(err){
				mongo.close();
				return callback(err);
			}
			collection.findOne({
				"name":name,
				"time.day":day,
				"title":title
			},function(err,doc){
				mongo.close();
				if(err){
					return callback(err);
				}
				callback(null,doc);
			});
		});
	});
};

/*更新一篇文章及其详细信息*/
Post.update=function(name,day,title,post,callback){
	mongo.open(function(err,db){
		if(err){
			return callback(err);
		}
		db.collection('posts',function(err,collection){
			if(err){
				mongo.close();
				return callback(err);
			}
			collection.update({
				"name":name,
				"time.day":day,
				"title":title
			},{
				$set:{
					post:post
				}
			},function(err){
				mongo.close();
				if(err){
					return callback(err);
				}
				callback(null);
			});
		});
	});
};

//删除一片文章
Post.remove=function(name,day,title,callback){
	mongo.open(function(err,db){
		if(err){
			return callback(err);
		}
		db.collection('posts',function(err,collection){
			if(err){
				mongo.close();
				return callback(err);
			}
			collection.remove({
				"name":name,
				"time.day":day,
				"title":title
			},{
				w:1
			},function(err){
				mongo.close();
				if(err){
					return callback(err);
				}
				callback(null);
			});
		});
	});
};

/*返回所有文章存档信息*/
Post.getArchive=function(callback){
	mongo.open(function(err,db){
		if(err){
			return callback(err);
		}
		db.collection('posts',function(err,collection){
			if(err){
				mongo.close();
				return callback(err);
			}
			collection.find({
			}).sort({
				time:-1
			}).toArray(function(err,docs){
				mongo.close();
				if(err){
					return callback(err);
				}
				console.log(docs);
				callback(null,docs);
			});
		});
	});
};

/*返回所有标签*/
Post.getTags=function(callback){
	console.log("POST GETTAGS");
	mongo.open(function(err,db){
		if(err){
			return callback(err);
		}
		db.collection('posts',function(err,collection){
			if(err){
				mongo.close();
				return callback(err);
			}
			collection.distinct("tags",function(err,docs){
				mongo.close();
				if(err){
					return callback(err);
				}
				callback(null,docs);
			});
		});
	});
};